perm filename STTINT.SAI[SS,SYS] blob sn#359080 filedate 1978-06-02 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "STTINT STATISTICS INTERPRETER"
C00006 00003	wordno←-1
C00013 ENDMK
C⊗;
BEGIN "STTINT STATISTICS INTERPRETER"

COMMENT
XD CSZSTA,000000	BYTE(1)0(2)0(9)CORE PAGE COUNT(6)J#
XD NAMSTA,400000	BYTE(1)1(5)0(6)UNUSED(6)J#	JOB NAME FOLLOWS IN 2 BYTES
XD QUESTA,410000	BYTE(1)1(5)1(6)QUEUE CODE(6)J#
XD SINSTA,420000	BYTE(1)1(5)2(6)JBTSIN BIT #(6)J#
XD SEGSTA,430000	BYTE(1)1(5)3(6)SEGMENT #(6)J#
XD SPWSTA,440000	BYTE(1)1(5)4(6)0-17:TICS OF SPW, 77:SPW OFF(6)J#
XD GLUSTA,450000	BYTE(1)1(5)5(6)JBTGLU COUNT(6)J#
XD LOKSTA,460000	BYTE(1)1(5)6(6)0:UNLOCKING, 1:LOCKING, 2:LOKSWP(6)J#
XD FITSTA,470000	BYTE(1)1(5)7(6)1:WANT TO LOCK(6)J#	FIT←J
XD HPGSTA,500000	BYTE(1)1(5)10(6)UNUSED(6)J#	NEXT BYTE IS # HI PAGES
XD JOBSTA,510000	BYTE(1)1(5)11(6)UNUSED(6)J#	NEXT JOB TO RUN
XD TIMSTA,520000	BYTE(1)1(5)12(12)TIME		HIGH ORDER TIME.
							NEXT BYTE IS LOW ORDER TIME
XD SWPSTA,530000	BYTE(1)1(5)13(6)1:OUT, 0:IN (6)J#	SWAP OP STARTS
				2 - FORCE SET, 3-CONSIDERED FOR SWAPOUT
				4 - DEADLOCKED, 5 - RESCNIN, 6 - NOFIT
XD CORSTA,540000	BYTE(1)1(5)14(6)UNUSED(6)UNUSED	NEXT BYTES ARE:
				LOFREE, HIFREE, HIUSED, LOKTOT, CORMX, CORHMX
XD MARK,770000		BYTE(1)1(5)37(6)CODE(6)J#	MARK
					CODE: 0=PRINT JOB INFO, 1=CLEAR INIT
;

EXTERNAL INTEGER _SKIP_;
integer wordno;
INTEGER I,J,K,L,OP,EOF,VAL,OTHERHALF,OURJOB,LINES,TIME,INIT;
LABEL SKIP_OURJOB;
STRING S1,S2,S3,S4,FILE;
DEFINE CRLF="'15&'12",TAB="'11",MAXLINES="52";
DEFINE NAME="1",SIZE="2",HICOUNT="3",QUEUE="4",JBTSIN="5",SEGMENT="6",
	GLUE="7",LOCK="8",SPW10="9",SPW6="10",INOUT="11",MAXVAL="INOUT";
DEFINE _NQUEUES="'234",_QNAMS="'235";
INTEGER ARRAY JOBS[1:MAXVAL,0:'77];
STRING ARRAY QNAMS[-1:'77];
PRELOAD_WITH "INT",
	"PHANTOM",
	"COMMAND",
	"JOBRD",
	"SPW",
	['37-4]"UNDEF";
STRING ARRAY SINNAMES[0:'37];
DEFINE TITLE=
"""JOB #	OP	VALUE	SIZES	IN/OUT	QUEUE	SEG #	JOBNAME	JBTSIN	JBTGLU	SPW10	SPW6""";
BOOLEAN HALF,DIRDEV,SPECIAL;
INTEGER PROCEDURE WORD;
IF HALF THEN BEGIN
	HALF←FALSE;
	RETURN(OTHERHALF);
	END
    ELSE BEGIN
	INTEGER TEMP;
	wordno←wordno+1;
	HALF←TRUE;
	TEMP←WORDIN(0);
	OTHERHALF←TEMP LAND '777777;
	RETURN(TEMP LSH -18);
	END;
PROCEDURE COUNT_LINE;
IF (LINES←LINES-1)<0 THEN BEGIN
	OUT(1,'14&TITLE&CRLF&CRLF);
	LINES←MAXLINES-3;
	END;
PROCEDURE PRINTIT;
	BEGIN
	COUNT_LINE;
	OUT(1,(IF 0<J<10 THEN " " ELSE NULL)&CVS(J)&S3&S1&S4&CRLF);
	S4←NULL;
	END;
wordno←-1;
INIT←-1;
FOR I←0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]←JOBS[INOUT,I]←-1;
I←CALL(_NQUEUES,"PEEK");
J←CALL(_QNAMS,"PEEK");
FOR K←0 STEP 1 UNTIL I DO QNAMS[K]←CVSTR(CALL(J+K,"PEEK"));
FOR I←I STEP 1 UNTIL '77 DO QNAMS[I]←"UNDEF";
OPEN(0,"DSK",'10,2,0,0,0,EOF);
LOOKUP(0,"STATS.DAT",EOF);
IF EOF THEN USERERR(0,0,"Can't find STATS.DAT");
HALF←FALSE;
S1←(IF CALL(CVSIX("LST"),"DEVCHR") THEN "LST" ELSE "DSK");
OPEN(1,S1,0,0,2,0,0,0);
DIRDEV←CALL(CVSIX(S1),"DEVCHR") LAND '4000000;
IF DIRDEV THEN BEGIN
	OUTSTR("Output file : ");
	IF EQU(NULL,FILE←INCHWL) THEN FILE←"STATS.LST";
	IF _SKIP_='175 THEN BEGIN COMMENT FILE NAME TERMINATED WITH AN ALTMODE;
		OUTSTR(CRLF);
		SPECIAL←TRUE
		END ELSE SPECIAL←FALSE;
	ENTER(1,FILE,EOF);
	IF EOF THEN USERERR(0,0,"Can't enter "&FILE);
	PTOSTR(0,"SPOOL "&FILE);
	END;
OUT(1,TITLE&CRLF&CRLF);
LINES←MAXLINES-2;
OURJOB←WORD;
S4←NULL;
WHILE TRUE DO BEGIN
SKIP_OURJOB:	VAL←WORD;
	IF EOF THEN DONE;
	IF VAL=0 THEN GO TO SKIP_OURJOB;
	J←VAL LAND '77;
	IF J=OURJOB THEN GO TO SKIP_OURJOB;
	IF VAL LAND '400000 THEN BEGIN
		OP←(VAL LSH -12)LAND '37;
		VAL←(VAL LSH -6)LAND '77;
		END
	    ELSE BEGIN
		OP←-1-(VAL LSH -15);
		VAL←(VAL LSH -6)LAND '777;
		END;
	S1←TAB&CVS(JOBS[SIZE,J])&","&CVS(JOBS[HICOUNT,J])&TAB&
		(IF JOBS[INOUT,J] THEN "SWAPPED" ELSE "IN CORE")&
		TAB&QNAMS[JOBS[QUEUE,J]]&
		TAB&CVS(JOBS[SEGMENT,J])&TAB&CVXSTR(JOBS[NAME,J])&
		TAB&CVOS(JOBS[JBTSIN,J])&TAB&CVS(JOBS[GLUE,J])&
		TAB&CVOS(JOBS[SPW10,J])&TAB&CVOS(JOBS[SPW6,J]);
	IF OP='37 THEN
		IF VAL=0 THEN BEGIN S3←"   INITIAL STATE"; PRINTIT;
			GO TO SKIP_OURJOB END
		ELSE IF VAL=1 THEN BEGIN INIT←0; GO TO SKIP_OURJOB END;
	IF ¬(-1≤OP≤'14) THEN BEGIN
		COUNT_LINE;
		OUT(1,"ILLEGAL OP-CODE, VALUE = "&CVS(OP)&CRLF);
		GO TO SKIP_OURJOB;
		END;
	CASE OP+1 OF BEGIN
		[0] BEGIN
			S3←"	SIZE	"&CVS(VAL);
			IF VAL≠0 THEN JOBS[SIZE,J]←VAL ELSE JOBS[HICOUNT,J]←0;
		    END;
		[1] BEGIN COMMENT OP=0 NAME;
			VAL←(WORD LSH 18)+WORD;
			S3←"	NAME	"&CVXSTR(JOBS[NAME,J]←VAL);
		    END;
		[2] S3←"	QUEUE	"&QNAMS[JOBS[QUEUE,J]←VAL];
		[3] BEGIN
		  IF VAL LAND '40 THEN BEGIN
			S3←"     +";
			JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LOR('400000 LSH -(VAL←VAL-'40));
			END
		    ELSE BEGIN
			S3←"     -";
			JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LAND LNOT('400000 LSH -VAL);
			END;
		  S3←S3&"JBTSIN	"&SINNAMES[VAL];
		  END;
		[4] IF VAL THEN S3←"	SEG #	"&CVS(JOBS[SEGMENT,J]←VAL)
			ELSE S3←"	FLUSHES	SEGMENT";
		[5] IF VAL='77 THEN BEGIN
			S3←"	SPW	OFF";
			JOBS[SPW6,J]←JOBS[SPW10,J]←0;
			END
		  ELSE IF VAL LAND '40 THEN BEGIN
			VAL←VAL-'40;
			S3←"	SPW6	"&CVOS(VAL);
			JOBS[SPW6,J]←VAL;
			END
		    ELSE BEGIN
			S3←"	SPW10	"&CVOS(VAL);
			JOBS[SPW10,J]←VAL;
			END;
		[6] IF JOBS[GLUE,J]←VAL THEN S3←"	GLUE	"&CVS(VAL)
			ELSE S3←"	UNGLUE	";
		[7] BEGIN
		    JOBS[LOCK,J]←VAL;
		    CASE VAL OF BEGIN
			[0] S3←"	UNLOCK	";
			[1] S3←"	LOCK	";
			[2] S3←"	LOKSWP	"
			END;
		    END;
		[8] CASE VAL OF BEGIN
			[0] S3←"	FIT	IN";
			[1] S3←"	FIT	IN (L)"
		    END;
		[9] BEGIN COMMENT OP='10 HI PAGE COUNT CHANGE;
		    VAL←WORD;
		    IF VAL=JOBS[HICOUNT,J] THEN GO TO SKIP_OURJOB
			ELSE S3←"	HICOUNT	"&CVS(JOBS[HICOUNT,J]←VAL)
		    END;
		[10] S3←"	RUN	  ";
		[11] BEGIN
			VAL←(((VAL LSH 6) LOR J) LSH 18) LOR WORD;
			TIME←VAL DIV 3600; VAL←VAL MOD 3600;
			S4←'11&CVS(TIME DIV 60)&":"&CVS(TIME MOD 60)&":"
			   &CVS(VAL DIV 60)&"'"&CVS(VAL MOD 60);
			GO TO SKIP_OURJOB;
		    END;
		[12] CASE VAL OF BEGIN
			[0] BEGIN
				S3←"   *	FINISH IN";
				JOBS[INOUT,J]←0;
			    END;
			[1] BEGIN
				S3←"   *	START	OUT";
				JOBS[INOUT,J]←-1;
			    END;
			[2] S3←"   *	FORCE	OUT";
			[3] S3←"   *	SIZCHK	   ";
			[4] S3←"   *	DEADLOCKED ";
			[5] S3←"   *	RESCNIN    ";
			[6] S3←"   *	NO FIT     "
		    END;
		[13] BEGIN
			COUNT_LINE;
			OUT(1,"LOFREE="&CVS(WORD)&" HIFREE="&CVS(WORD)&" HIUSED="&
				CVS(WORD)&" LOKTOT="&CVS(WORD)&" CORMX="&
				CVS(WORD LSH -9)&" CORHMX="&CVS(WORD LSH -9)&CRLF);
			GO TO SKIP_OURJOB;
		     END
		END;
	IF (¬SPECIAL ∨ (OP='10 ∨ OP=7)) ∧ JOBS[QUEUE,J]≥0 ∧ INIT=0 THEN PRINTIT
	END;
RELEASE(0);
RELEASE(1);
CALL(0,"EXIT");
END;